package com.zy.smartdb.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.util.HashMap;

/**
 * @Description:
 * @Author: zara
 * @Version V3.0
 * @Date: 2022/9/21 2:50 下午
 */

/**
 * druid实现的后台监控自动配置
 */
@Configuration
public class DruidConfig {

    /**
     * 引用配置文件的配置参数
     */
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }

    /**
     * druid实现的后台监控自动配置 : web.xml, ServletRegistrationBean
     * 因为SpringBoot 内置了servlet容器，所以没有web.xml， 替代方法ServletRegistrationBean
     */

    @Bean
    public ServletRegistrationBean statViewServlet() {
        // "/druid/*就是端口后的路径"
        ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");

        // 后台需要有人登录，账号密码配置
        HashMap<String, String> initParameters = new HashMap<>();

        // 添加配置
        // 登录key 是固定的loginUsername 管理员用户名
        initParameters.put("loginUsername", "admin");
        // 登录key 是固定的loginPassword 管理员密码
        initParameters.put("loginPassword", "123456");

        // 允许谁可以访问
        // initParameters.put("allow", "localhost");
        // 为空。所有的人都可以访问。localhost只有本机可以访问
        initParameters.put("allow", "");

        // 禁止谁可以访问 （当前不需要）
//        initParameters.put("kuangshen", "192.168.154.1");

        bean.setInitParameters(initParameters);
        return bean;
    }


    /**
     * filter 过滤器
     */
    @Bean
    public FilterRegistrationBean webStatFilter() {
        FilterRegistrationBean bean = new FilterRegistrationBean();

        bean.setFilter(new WebStatFilter());

        // 可以过滤哪些请求
        HashMap<String, String> initParameters = new HashMap<>();

        // 这些东西都不进行统计
        initParameters.put("exclusions", "*.js,*.css,/druid/*");

        // 可以过滤哪些请求
        bean.setInitParameters(initParameters);

        return bean;
    }
}

